//
//  HMOAuthViewController.swift
//  WeiBo14
//
//  Created by HM on 16/3/5.
//  Copyright © 2016年 HM. All rights reserved.
//

import UIKit
import SVProgressHUD

// appkey
let WB_APPKEY = "418721235"
// 点击授权之后跳转的页面
let WB_REDIRECT_URI = "http://www.itheima.com/"

let WB_APPSECRET = "818172b895d549363ae8a67b3b404f50"

class HMOAuthViewController: UIViewController {
    
    private lazy var OAuthLoginUrl = NSURL(string: "https://api.weibo.com/oauth2/authorize?client_id=\(WB_APPKEY)&redirect_uri=\(WB_REDIRECT_URI)")!
    
    override func loadView() {
        view = webView
        // 初始化一个request
        let request = NSURLRequest(URL: OAuthLoginUrl)
        webView.loadRequest(request)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }
    
    /// 设置视图
    private func setupUI(){
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", target: self, action: "back")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: "autoFill")
        navigationItem.title = "新浪微博"
    }
    
    // MARK: - 监听方法
    
    // 自动填充帐号与密码
    @objc private func autoFill(){
        let jsString = "document.getElementById('userId').value='vgfjh15964@163.com';document.getElementById('passwd').value='qw1987'"
        // 让当前 webView执行以上这句js代码
        webView.stringByEvaluatingJavaScriptFromString(jsString)
    }
    
    @objc private func back(){
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    // MARK: - 懒加载控件
    private lazy var webView: UIWebView = {
        let webView = UIWebView()
        webView.delegate = self
        return webView
    }()
}

// MARK: - webView 的 delegate

extension HMOAuthViewController: UIWebViewDelegate {
    
    
    // 当webView要加载某个请求的时候,会调用些方法去询问是否要去加载这个request
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        print("webView加载的url:\(request.URL?.absoluteString)")
        
        // 判断 url 是否为空
        guard let url = request.URL else {
            return true
        }
        // 判断当前加载的是否是回调页
        let urlStr = url.absoluteString
        if urlStr.hasPrefix(WB_REDIRECT_URI)  {
            // 截取urlStr中 code= 后面的 32位字符
            let query = url.query!
            // 截取 code
            let code = query.substringFromIndex("code=".endIndex)
            // 拿着授权code去获取AccessToken
            print(code)
            // loadAccessToken(code)
            // retur false 的原因是因为不用给用户展示回调页
            
            // 调用视图模型身上的方法去作登录的一些请求逻辑,并且把登录是否成功(登录结果)回调过来就可以了
            HMUserAccountViewModel.sharedAccountViewModel.loadAccessToken(code, callback: { (isSuccess) -> () in
                if isSuccess {
                    // 跳转界面
                    // 当前控件器是 Moda 出来的控制器一定要在合适的时候去 dismiss 掉,不然会一直常驻内存
                    self.dismissViewControllerAnimated(false, completion: { () -> Void in
                        print("登录成功,跳转界面,跳转到欢迎页面里面去,切换根控制器")
//                        // 1. 获取到 appdelegate 里面的window
//                        let delegate = UIApplication.sharedApplication().delegate! as! AppDelegate
//                        print(delegate)
//                        let window = delegate.window
//                        window?.rootViewController = HMWelcomeViewController()
                        
                        // 发送一个切换根控制器的通知,Appdelegate收到之后就去切换
                        NSNotificationCenter.defaultCenter().postNotificationName(HMSwitchRootVCNotification, object: self)
                    })
                }else{
                    SVProgressHUD.showErrorWithStatus("由于某些原因登录失败")
                }
            })
            return false
        }
        
        return true
    }
    
    
//    /// 去请求accessToken
//    ///
//    /// - parameter code: 授权码
//    private func loadAccessToken(code: String){
//        
//        // 请求地址
//        let urlString = "https://api.weibo.com/oauth2/access_token"
//        
//        /**
//         必选	类型及范围	说明
//         client_id	true	string	申请应用时分配的AppKey。
//         client_secret	true	string	申请应用时分配的AppSecret。
//         grant_type	true	string	请求的类型，填写authorization_code
//         
//         grant_type为authorization_code时
//         必选	类型及范围	说明
//         code	true	string	调用authorize获得的code值。
//         redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
//        */
//        
//        // 请求的参数
//        let parameters = [
//            "client_id": WB_APPKEY,
//            "client_secret": WB_APPSECRET,
//            "grant_type": "authorization_code",
//            "code": code,
//            "redirect_uri":WB_REDIRECT_URI
//        ]
//        
//        // 发送请求
//        HMNetworkTools.sharedTools.requst(.POST, urlString: urlString, parameters: parameters) { (responseObject, error) -> () in
//            if error != nil {
//                print("\(error)")
//                return
//            }
//            // 进行字典转模型,并且获取用户的个人信息
//            let account = HMUserAccount(dict: responseObject!)
//            print(account)
//            // 获取用户的个人信息
//            self.loadUserInfo(account)
//        }
//    }
//    
//    
//    /// 加载用户信息
//    ///
//    /// - parameter account: 用户个人信息的模型
//    private func loadUserInfo(account: HMUserAccount){
//        
//        let urlString = "https://api.weibo.com/2/users/show.json"
//        
//        guard let accessToken = account.access_token, uid = account.uid else {
//            print("参数不够")
//            return
//        }
//        
//        // 请求参数
//        let parameters = [
//            "access_token": accessToken,
//            "uid": uid
//        ]
//        
//        HMNetworkTools.sharedTools.requst(.GET, urlString: urlString, parameters: parameters) { (responseObject, error) -> () in
//            if error != nil {
//                print("个人信息请求错误")
//                SVProgressHUD.showErrorWithStatus("个人信息请求错误")
//                return
//            }
//            print(responseObject)
//            
//            // 1. 获取到用户的昵称与头像并设置到模型里面去
//            account.screen_name = responseObject!["screen_name"] as? String
//            account.avatar_large = responseObject!["avatar_large"] as? String
//            
//            // 2. 保存用户的登录的模型(以便下次进入软件的时候,直接使用)
//            
//            
//            // 归档
//            
//            // 归档的路径
//            let file = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("account.archive")
//            print(file)
//            NSKeyedArchiver.archiveRootObject(account, toFile: file)
//            
//            // 跳转界面???????
//        }
//    }
}
